const fs = require('fs-extra');
const path = require('path');
const chalk = require('chalk');
const { exec } = require('child_process');
const ora = require('ora');

async function createProject(projectName) {
  const targetDir = path.join(process.cwd(), projectName);

  // 检查目录是否存在
  if (fs.existsSync(targetDir)) {
    console.log(chalk.red(`错误：目录 ${projectName} 已存在！`));
    process.exit(1);
  }

  // 确保目标目录存在
  fs.ensureDirSync(targetDir);

  // 从Gitee下载模板
  const spinner = ora('正在从Gitee下载模板...').start();
  
  try {
    // 使用git clone命令
    const gitRepoUrl = 'https://gitee.com/z-h2o/uni-template.git';
    const tempDir = path.join(process.cwd(), `.temp-${Date.now()}`);
    
    // 创建临时目录并执行git clone
    await fs.ensureDir(tempDir);
    
    await new Promise((resolve, reject) => {
      exec(`git clone ${gitRepoUrl} ${tempDir}`, (error) => {
        if (error) {
          reject(error);
          return;
        }
        resolve();
      });
    });
    
    // 复制除了.git目录之外的所有文件到目标目录
    const files = await fs.readdir(tempDir);
    for (const file of files) {
      if (file !== '.git') {
        await fs.copy(
          path.join(tempDir, file),
          path.join(targetDir, file)
        );
      }
    }
    
    // 删除临时目录
    await fs.remove(tempDir);
    
    // 创建 .gitignore 文件
    const gitignoreContent = `node_modules/
dist/
unpackage/
.DS_Store
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.hbuilderx/
.idea/`;
    
    await fs.writeFile(path.join(targetDir, '.gitignore'), gitignoreContent);
    
    spinner.succeed(chalk.green(`项目 ${projectName} 创建成功！`));
  } catch (err) {
    spinner.fail('下载失败');
    console.log(chalk.red('模板下载出错：'), err);
    
    // 清理目标目录
    if (fs.existsSync(targetDir)) {
      await fs.remove(targetDir);
    }
  }
}

module.exports = { createProject };